/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package gamedsl2;

import org.eclipse.emf.common.util.EList;

import org.eclipse.emf.ecore.EObject;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Game Holder</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link gamedsl2.GameHolder#getStates <em>States</em>}</li>
 *   <li>{@link gamedsl2.GameHolder#getTracker <em>Tracker</em>}</li>
 *   <li>{@link gamedsl2.GameHolder#getMapLoader <em>Map Loader</em>}</li>
 *   <li>{@link gamedsl2.GameHolder#getTileShapes <em>Tile Shapes</em>}</li>
 *   <li>{@link gamedsl2.GameHolder#getName <em>Name</em>}</li>
 *   <li>{@link gamedsl2.GameHolder#isVsync <em>Vsync</em>}</li>
 *   <li>{@link gamedsl2.GameHolder#isFullScreen <em>Full Screen</em>}</li>
 *   <li>{@link gamedsl2.GameHolder#getTargetFps <em>Target Fps</em>}</li>
 *   <li>{@link gamedsl2.GameHolder#getCurrentState <em>Current State</em>}</li>
 * </ul>
 * </p>
 *
 * @see gamedsl2.Gamedsl2Package#getGameHolder()
 * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='GH5_gameHolderName GH6_uniqueStateName GH2_minMapLoader GH4_minStates GH7_uniqueStateId GH1_maxEventTracker GH3_maxTilShapes'"
 *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL GH5_gameHolderName='name -> notEmpty()' GH6_uniqueStateName='states.name->size()=states.name->asSet()->size()' GH2_minMapLoader='mapLoader -> size() >= 1' GH4_minStates='states -> size() >= 1' GH7_uniqueStateId='states.id->size()=states.id->asSet()->size()' GH1_maxEventTracker='tracker -> size() = 1' GH3_maxTilShapes='tileShapes -> size() = 1'"
 * @generated
 */
public interface GameHolder extends EObject {
	/**
	 * Returns the value of the '<em><b>States</b></em>' containment reference list.
	 * The list contents are of type {@link gamedsl2.State}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>States</em>' containment reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>States</em>' containment reference list.
	 * @see gamedsl2.Gamedsl2Package#getGameHolder_States()
	 * @model containment="true" required="true"
	 * @generated
	 */
	EList<State> getStates();

	/**
	 * Returns the value of the '<em><b>Tracker</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Tracker</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Tracker</em>' containment reference.
	 * @see #setTracker(EventTracker)
	 * @see gamedsl2.Gamedsl2Package#getGameHolder_Tracker()
	 * @model containment="true" required="true"
	 * @generated
	 */
	EventTracker getTracker();

	/**
	 * Sets the value of the '{@link gamedsl2.GameHolder#getTracker <em>Tracker</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Tracker</em>' containment reference.
	 * @see #getTracker()
	 * @generated
	 */
	void setTracker(EventTracker value);

	/**
	 * Returns the value of the '<em><b>Map Loader</b></em>' containment reference list.
	 * The list contents are of type {@link gamedsl2.MapLoader}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Map Loader</em>' containment reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Map Loader</em>' containment reference list.
	 * @see gamedsl2.Gamedsl2Package#getGameHolder_MapLoader()
	 * @model containment="true" required="true"
	 * @generated
	 */
	EList<MapLoader> getMapLoader();

	/**
	 * Returns the value of the '<em><b>Tile Shapes</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Tile Shapes</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Tile Shapes</em>' containment reference.
	 * @see #setTileShapes(TileShapes)
	 * @see gamedsl2.Gamedsl2Package#getGameHolder_TileShapes()
	 * @model containment="true" required="true"
	 * @generated
	 */
	TileShapes getTileShapes();

	/**
	 * Sets the value of the '{@link gamedsl2.GameHolder#getTileShapes <em>Tile Shapes</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Tile Shapes</em>' containment reference.
	 * @see #getTileShapes()
	 * @generated
	 */
	void setTileShapes(TileShapes value);

	/**
	 * Returns the value of the '<em><b>Name</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Name</em>' attribute.
	 * @see #setName(String)
	 * @see gamedsl2.Gamedsl2Package#getGameHolder_Name()
	 * @model
	 * @generated
	 */
	String getName();

	/**
	 * Sets the value of the '{@link gamedsl2.GameHolder#getName <em>Name</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Name</em>' attribute.
	 * @see #getName()
	 * @generated
	 */
	void setName(String value);

	/**
	 * Returns the value of the '<em><b>Vsync</b></em>' attribute.
	 * The default value is <code>"true"</code>.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Vsync</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Vsync</em>' attribute.
	 * @see #setVsync(boolean)
	 * @see gamedsl2.Gamedsl2Package#getGameHolder_Vsync()
	 * @model default="true"
	 * @generated
	 */
	boolean isVsync();

	/**
	 * Sets the value of the '{@link gamedsl2.GameHolder#isVsync <em>Vsync</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Vsync</em>' attribute.
	 * @see #isVsync()
	 * @generated
	 */
	void setVsync(boolean value);

	/**
	 * Returns the value of the '<em><b>Full Screen</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Full Screen</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Full Screen</em>' attribute.
	 * @see #setFullScreen(boolean)
	 * @see gamedsl2.Gamedsl2Package#getGameHolder_FullScreen()
	 * @model
	 * @generated
	 */
	boolean isFullScreen();

	/**
	 * Sets the value of the '{@link gamedsl2.GameHolder#isFullScreen <em>Full Screen</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Full Screen</em>' attribute.
	 * @see #isFullScreen()
	 * @generated
	 */
	void setFullScreen(boolean value);

	/**
	 * Returns the value of the '<em><b>Target Fps</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Target Fps</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Target Fps</em>' attribute.
	 * @see #setTargetFps(int)
	 * @see gamedsl2.Gamedsl2Package#getGameHolder_TargetFps()
	 * @model
	 * @generated
	 */
	int getTargetFps();

	/**
	 * Sets the value of the '{@link gamedsl2.GameHolder#getTargetFps <em>Target Fps</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Target Fps</em>' attribute.
	 * @see #getTargetFps()
	 * @generated
	 */
	void setTargetFps(int value);

	/**
	 * Returns the value of the '<em><b>Current State</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Current State</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Current State</em>' reference.
	 * @see #setCurrentState(State)
	 * @see gamedsl2.Gamedsl2Package#getGameHolder_CurrentState()
	 * @model required="true"
	 * @generated
	 */
	State getCurrentState();

	/**
	 * Sets the value of the '{@link gamedsl2.GameHolder#getCurrentState <em>Current State</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Current State</em>' reference.
	 * @see #getCurrentState()
	 * @generated
	 */
	void setCurrentState(State value);

} // GameHolder
